import axios from 'axios';
import { RSAEncrypt } from "./JSEncrypt.js"; // 导入RSA加密函数（需确保JSEncrypt.js存在）

// 参数转form-urlencoded格式
function transParams(p) {
  return Object.entries(p)
    .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
    .join('&');
}

/**
 * 联通验证码登录函数
 * @param {Object} params - 登录参数（JSON格式）
 * @param {string} params.mobile - 手机号
 * @param {string} params.smscode - 验证码
 * @param {string} params.appId - 应用ID
 * @returns {Promise<Object>} 登录结果（success表示状态，msg为提示，data存Cookie和appId）
 */
async function getToken(params = {}) {
  // 解构参数并做默认值处理
  const { mobile = '', smscode = '', appId = '' } = params;
  // 前置参数校验
  if (!mobile || !smscode) {
    return { success: false, msg: '⚠️ 手机号和验证码不能为空' };
  }
  // 构建请求体
  let config = {
          method: 'post',
          url: 'https://m.client.10010.com/mobileService/radomLogin.htm',
          data: transParams({
            mobile: RSAEncrypt(mobile),
            password: RSAEncrypt(smscode),
            appId: appId,
            version: 'iphone_c@9.0100'
          }),
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
            'Referer': 'https://m.client.10010.com/'
          },
          withCredentials: true,
          responseType: 'text'
        };

  // 发送请求
  const response = await axios.request(config)
  let loginRes;
  // console.log(JSON.stringify(loginRes))
  // 解析响应数据
    try { loginRes = JSON.parse(response.data); } 
    catch (e) { 
      return { success: false, msg: `登录失败：JSON解析错${e || '未知错'}`};
    }

    // 处理登录结果
    if (loginRes.success === '0' || loginRes.code === '0') {
      // const cookie = (response.headers['set-cookie'] || response.headers['Set-Cookie'])?.join('; ') || '';
      // 获取所有 Set-Cookie 头（兼容大小写）
      const allCookies = response.headers['set-cookie'] || response.headers['Set-Cookie'] || [];

      // 筛选并提取关键部分
      const targetCookies = allCookies
        .filter(cookieStr => cookieStr.startsWith('ecs_acc') || cookieStr.startsWith('ecs_token'))
        .map(cookieStr => {
          // 提取第一个分号前的内容（即 key=value 部分）
          const keyValue = cookieStr.split(';')[0];
          return keyValue;
        });

      // 拼接成最终格式
      const cookie = targetCookies.join('; ') + (targetCookies.length ? '; ' : '');
      if (!cookie) throw new BaseErr('Cookie为空');
      
      console.log('🍪 登录成功');
      return { success: true, data: { cookie, appId: loginRes.appId || appId} };
    } else {
        return { success: false, msg: `登录失败：${loginRes.dsc || '未知错'}`};
    }
}

// 注意：Node.js中顶层await需在ES模块环境（package.json加"type":"module"），否则需用异步函数包裹
// 示例调用（需注释掉或在实际使用时调用）
// (async () => {
//   const result = await Login({
//     mobile: '15188820314',
//     smscode: '144098',
//     appId: '06eccb0b7c2fd02bc13683421a0fc09f9ecd8b30bff1'
//   });
//   console.log('登录结果:', result);
// })();

export { getToken };